#pragma once
#include "Binding/BoundExpression.hpp"
#include "Symbols/VariableSymbol.hpp"

class BoundAssignmentExpression : public BoundExpression
{
public:
    SharedVariableSymbol  Variable;
    SharedBoundExpression Expression;

public:
    BoundAssignmentExpression(SharedVariableSymbol variable, SharedBoundExpression expression)
        : BoundExpression(BoundNodeKind::AssignmentExpression, expression->GetType()), Variable(variable), Expression(expression)
    {
    }

public:
    virtual std::vector<SharedBoundNode>                      GetChildren() override { return {this->Expression}; }
    virtual std::vector<std::tuple<std::string, std::string>> GetProperties() override
    {
        return {{"Type", this->GetType()->ToString()}, {"Variable", this->Variable->GetName()}};
    }
};
